using System;
using System.Collections.Generic;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using MakeIT.Framework.Util;
using MakeIT.SGI.ERP.Entidades;
using MakeIT.SGI.ERP.Negocios;

namespace MakeIT.SGI.ERP.Apresentacao
{
	public partial class CadastroLogradouro : System.Web.UI.Page
	{

		UsuarioVO usuarioVO = null;
        protected SgiDAOT SgiDAOT = null;

        protected void Page_Load(object sender, EventArgs e)
        {
            this.SgiDAOT = new SgiDAOT();
			usuarioVO = (UsuarioVO)this.Session["userActive"];

			if (!IsPostBack)
			{
				Util.HabilitarCampos(false, this.panelCad);

                carregaDDL();
			}

		}

        protected void Page_Unload(object sender, EventArgs e)
        {
            try
            {
                if (this.SgiDAOT != null)
                    this.SgiDAOT.closeDAO();
            }
            catch (Exception ex) { }
        }

        protected void carregaDDL()
        {
            CarregaDDL.carregaEstado(this.SgiDAOT, ddlIdEstado);
            CarregaDDL.carregaEstado(this.SgiDAOT, ddlCadEstado);

            CarregaDDL.carregaNULL(ddlIdCidade);
            CarregaDDL.carregaNULL(ddlCadCidade);

            CarregaDDL.carregaNULL(ddlIdBairro);
            CarregaDDL.carregaNULL(ddlCadBairro);

            CarregaDDL.carregaTipoLogradouro(this.SgiDAOT, ddlIdLogradouroTipo, null);
            CarregaDDL.carregaTipoLogradouro(this.SgiDAOT, ddlCadIdLogradouroTipo, null);
        }

        protected void atualizarDdlidUf(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaEstado(this.SgiDAOT, ddlIdEstado);
            CarregaDDL.carregaEstado(this.SgiDAOT, ddlCadEstado);

            ddlCadEstado_SelectedIndexChanged(null, null);
        }

        protected void atualizarDdlidCidade(object sender, ImageClickEventArgs e)
        {
            CarregaDDL.carregaCidade(this.SgiDAOT, ddlIdCidade, int.Parse(ddlIdEstado.SelectedValue));
            CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));

            ddlCadCidade_SelectedIndexChanged(null, null);
        }

		protected void atualizarDdlidBairro(object sender, ImageClickEventArgs e)
		{
            CarregaDDL.carregaBairro(this.SgiDAOT, ddlIdBairro, int.Parse(ddlIdCidade.SelectedValue));
            CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, int.Parse(ddlCadCidade.SelectedValue));
        }

		protected void atualizarDdlidLogradouroTipo(object sender, ImageClickEventArgs e)
		{
            CarregaDDL.carregaTipoLogradouro(this.SgiDAOT, ddlIdLogradouroTipo, null);
            CarregaDDL.carregaTipoLogradouro(this.SgiDAOT, ddlCadIdLogradouroTipo, null);
		}

		/// <summary>
		/// Manipula o evento do botão btnSalvar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnSalvar_Click(object sender, EventArgs e)
		{

			//Declara objetos
			LogradouroVO logradouroVO = null;
			bool novoRegistro = false;

			try
			{
				//Verifica se o ID é nulo, se sim = cadastro novo
				if (string.IsNullOrEmpty(this.txtCadIdLogradouro.Text))
				{
					logradouroVO = LogradouroVO.CreateVO();
					logradouroVO.cadastro = DateTime.Now;
					logradouroVO.cadastradoPor = usuarioVO.user;

					novoRegistro = true;

				}
				//Recupera dados para serem alterados
				else
				{
					//Recupera dados
					logradouroVO = SgiDAOT.getLogradouro(Int32.Parse(this.txtCadIdLogradouro.Text));
				}

				logradouroVO.idBairro = Int32.Parse(this.ddlCadBairro.SelectedValue);
				logradouroVO.cEP = this.txtCadCEP.Text;
				logradouroVO.idLogradouroTipo = Int32.Parse(this.ddlCadIdLogradouroTipo.SelectedValue);
				logradouroVO.logradouro = this.txtCadLogradouro.Text;
				logradouroVO.edicao = DateTime.Now;
				logradouroVO.editadoPor = usuarioVO.user;

				//Chama metodo para salvar ou criar novo registro
				if (novoRegistro)
					logradouroVO.idLogradouro = (int)SgiDAOT.newLogradouro(logradouroVO);
				else
					SgiDAOT.setLogradouro(logradouroVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro salvo com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Atualiza formulario, apos salvar os dados
				this.txtCadIdLogradouro.Text = logradouroVO.idLogradouro.ToString();
				this.ltCadastradoPor.Text = logradouroVO.cadastradoPor;
				this.ltEditadoPor.Text = logradouroVO.editadoPor;
				this.ltDataCadastro.Text = logradouroVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = logradouroVO.edicao.ToString("dd/MM/yyyy");

			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnPesquisa
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnPesquisa_Click(object sender, EventArgs e)
		{

			//Declara objetos
			int? idLogradouro = null;
            int? idEstado = null;
            int? idCidade = null;
			int? idBairro = null;
			string cEP = null;
			int? idLogradouroTipo = null;
			string logradouro = null;

			try
			{

				if (!string.IsNullOrEmpty(this.txtIdLogradouro.Text))
				{
					idLogradouro = Int32.Parse(this.txtIdLogradouro.Text);
				}

                if (!this.ddlIdEstado.SelectedValue.Equals("-1"))
                {
                    idEstado = Int32.Parse(this.ddlIdEstado.SelectedValue);
                }

				if(!this.ddlIdCidade.SelectedValue.Equals("-1"))
				{
					idCidade = Int32.Parse(this.ddlIdCidade.SelectedValue);
				}

                if (!this.ddlIdBairro.SelectedValue.Equals("-1"))
                {
                    idBairro = Int32.Parse(this.ddlIdBairro.SelectedValue);
                }
				if (!string.IsNullOrEmpty(this.txtCEP.Text))
				{
					cEP = this.txtCEP.Text;
				}

				if(!this.ddlIdLogradouroTipo.SelectedValue.Equals("-1"))
				{
					idLogradouroTipo = Int32.Parse(this.ddlIdLogradouroTipo.SelectedValue);
				}

				if (!string.IsNullOrEmpty(this.txtLogradouro.Text))
				{
					logradouro = this.txtLogradouro.Text;
				}


				//Recupera a lista de registros segundo a pesquisa
				this.grvResultado.DataSource = SgiDAOT.getLogradouros(idLogradouro, logradouro, idEstado, idCidade, idBairro, idLogradouroTipo, cEP);

				//Vincula os dados
				this.grvResultado.DataBind();
			}
			catch (Exception ex)
			{

				throw ex;
			}
		}

		/// <summary>
		/// Manipula o evento do botão btnCancelar
		/// </summary>
		/// <param name="sender">Objeto disparador do evento</param>
		/// <param name="e">Argumento do evento</param>
		protected void btnCancelar_Click(object sender, EventArgs e)
		{
			//Volta para a tab page de pesquisa
			//this.tabLogradouro.ActiveTabIndex = 0;

			// Desabilita os campos para edição
			Util.HabilitarCampos(false, this.panelCad);

			// Destrava botão de edição
			this.btnEditar.Enabled = (!string.IsNullOrEmpty(this.txtCadIdLogradouro.Text));

			// Destrava botão de exclusao
			this.btnExcluir.Enabled = (!string.IsNullOrEmpty(this.txtCadIdLogradouro.Text));

			// Detrava botão de novo
			this.btnNovo.Enabled = true;

			// Desabilita o botão salvar
			this.btnSalvar.Enabled = false;

		}

		protected void imgbVisualizar_Click(object sender, ImageClickEventArgs e)
		{
			// Declara objetos
			LogradouroVO logradouroVO = null;
			int idLogradouro = 0;

            atualizarDdlidUf(null, null);

			try
			{
				//Recupera os argumentos com o ID do objeto
				string[] argumentos = ((ImageButton)sender).CommandArgument.Split(';');
				idLogradouro = Int32.Parse(argumentos[0]);

				//Recupera o objeto
				logradouroVO = SgiDAOT.getLogradouro(idLogradouro);

				this.txtCadIdLogradouro.Text = logradouroVO.idLogradouro.ToString();

                logradouroVO.idBairroVO = SgiDAOT.getBairro(logradouroVO.idBairro);
                logradouroVO.idBairroVO.idCidadeVO = SgiDAOT.getCidade(logradouroVO.idBairroVO.idCidade);

                this.ddlCadEstado.SelectedValue = logradouroVO.idBairroVO.idCidadeVO.idUf.ToString();
                atualizarDdlidCidade(null, null);
                this.ddlCadCidade.SelectedValue = logradouroVO.idBairroVO.idCidade.ToString();
                atualizarDdlidBairro(null, null);
				this.ddlCadBairro.SelectedValue = logradouroVO.idBairro.ToString();

				this.txtCadCEP.Text = logradouroVO.cEP;
				this.ddlCadIdLogradouroTipo.SelectedValue = logradouroVO.idLogradouroTipo.ToString();
				this.txtCadLogradouro.Text = logradouroVO.logradouro;
				this.ltCadastradoPor.Text = logradouroVO.cadastradoPor;
				this.ltEditadoPor.Text = logradouroVO.editadoPor;
				this.ltDataCadastro.Text = logradouroVO.cadastro.ToString("dd/MM/yyyy");
				this.ltDataEdicao.Text = logradouroVO.edicao.ToString("dd/MM/yyyy");

				//Habilita tab page do cadastro
				this.tabLogradouro.ActiveTabIndex = 1;

				//Desabilita campos para edição
				Util.HabilitarCampos(false, this.panelCad);

				//Desabilita botão salvar
				this.btnSalvar.Enabled = false;

				//Habilita botão editar
				this.btnEditar.Enabled = true;

				//Habilita botão excluir
				this.btnExcluir.Enabled = true;

				//Habilita botão novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{
				throw ex;
			}
		}

		// <summary>
		// Manipula o evento editar do web form
		// </summary>
		// <param name="sender">Objeto disparador de evento</param>
		// <param name="e">Argumento do evento</param>
		protected void btnEditar_Click(object sender, EventArgs e)
		{
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			// Trava apenas os text box da PK
			this.txtCadIdLogradouro.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadLogradouro.Focus();
		}

		protected void btnNovo_Click(object sender, EventArgs e)
		{
            ddlCadEstado.SelectedValue = "-1";
            ddlCadEstado_SelectedIndexChanged(null, null);

			//Limpa formulario, para a entrada de novo registro
			Util.LimparCampos(this.panelCad);
			// Habilita os campos para edição
			Util.HabilitarCampos(true, this.panelCad);

			this.ltCadastradoPor.Text = "";
			this.ltEditadoPor.Text = "";
			this.ltDataCadastro.Text = "";
			this.ltDataEdicao.Text = "";

			// Trava apenas os text box da PK
			this.txtCadIdLogradouro.Enabled = false;

			// Trava botão de edição
			this.btnEditar.Enabled = false;

			// Trava botão de exclusao
			this.btnExcluir.Enabled = false;

			// Trava botão de novo
			this.btnNovo.Enabled = false;

			// Habilita o botão salvar
			this.btnSalvar.Enabled = true;

			this.txtCadLogradouro.Focus();

		}

		protected void btnExcluir_Click(object sender, EventArgs e)
		{
			//Declara objetos
			LogradouroVO logradouroVO = null;

			try
			{
				//Cria objeto
				logradouroVO = LogradouroVO.CreateVO();
				logradouroVO.idLogradouro = Int32.Parse(this.txtCadIdLogradouro.Text);

				//verifica se tem pessoaendereco dependentes deste registro
                //if (SgiDAOT.getCountPessoaenderecoxIdLogradouro(logradouroVO.idLogradouro) > 0)
                //{
                //    Util.ExibeAlert(this, "Há Endereço de Pessoa(s) associado(s) a este registro. Exclusão não permitida");
                //    return;
                //}

				//Chama metodo para excluir registro
				SgiDAOT.delLogradouro(logradouroVO);

				// Exibe msg de sucesso ao salvar registro
				Util.ExibeAlert(this, "Registro excluido com sucesso!");

				//Popula grid atualizado
				this.btnPesquisa_Click(null, null);

				//Limpa formulario, apos salvar os dados
				Util.LimparCampos(this.panelCad);
				this.ltCadastradoPor.Text = "";
				this.ltEditadoPor.Text = "";
				this.ltDataCadastro.Text = "";
				this.ltDataEdicao.Text = "";

				// Trava botão de edição
				this.btnEditar.Enabled = false;

				// Trava botão de exclusao
				this.btnExcluir.Enabled = false;

				// Desabilita o botão salvar
				this.btnSalvar.Enabled = false;

				// Habilita o botao novo
				this.btnNovo.Enabled = true;

			}
			catch (Exception ex)
			{

				throw ex;
			}
			
		}

        protected void ddlCadEstado_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (sender != null && e != null)
            {
                if(((DropDownList)sender).Equals(ddlIdEstado))
                    CarregaDDL.carregaCidade(this.SgiDAOT, ddlIdCidade, int.Parse(ddlIdEstado.SelectedValue));
                else
                    CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));
            }
            else
            {
                CarregaDDL.carregaCidade(this.SgiDAOT, ddlIdCidade, int.Parse(ddlIdEstado.SelectedValue));
                CarregaDDL.carregaCidade(this.SgiDAOT, ddlCadCidade, int.Parse(ddlCadEstado.SelectedValue));
            }
            
            ddlCadCidade_SelectedIndexChanged(null, null);
            ddlCadBairro_SelectedIndexChanged(null, null);
        }

        protected void ddlCadCidade_SelectedIndexChanged(object sender, EventArgs e)
        {
            //Aba Pesquisa
            if(ddlIdCidade.Items.Count > 0)
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlIdBairro, int.Parse(ddlIdCidade.SelectedValue));
            else
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlIdBairro, null);


            //Aba Cadastro
            if (ddlCadCidade.Items.Count > 0)
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, int.Parse(ddlCadCidade.SelectedValue));
            else
                CarregaDDL.carregaBairro(this.SgiDAOT, ddlCadBairro, null);


            //ddlCadBairro_SelectedIndexChanged(null, null);
        }

        protected void ddlCadBairro_SelectedIndexChanged(object sender, EventArgs e)
        {
            ddlCadIdLogradouroTipo.SelectedIndex = 0;
            txtCadCEP.Text = String.Empty;
        }       

	}
}
